package br.com.biblioteca.Dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.com.biblioteca.Connect.Conexao;
import br.com.biblioteca.Modelo.Emprestimo;

public class EmprestimoDao
{
	private PreparedStatement ps = null;
	private Conexao conexao = new Conexao();
	
	public boolean insertEmprestimo(Emprestimo emprestimo) throws SQLException
	{
		boolean retorno = false;
		
		try {
			String sql = "insert into tb_emprestimo (id, id_livro, id_cliente, dt_emprestimo, dt_devolucao) values (?, ?, ?, ?, ?);";
			ps = conexao.getConnection().prepareStatement(sql);
			ps.setInt(1, emprestimo.getId());
			ps.setInt(2, emprestimo.getLivro().getId());
			ps.setInt(3, emprestimo.getCliente().getId());
			ps.setDate(4, emprestimo.getDtEmprestimo());
			ps.setDate(5, emprestimo.getDtDevolucao());

			int insert = ps.executeUpdate();
			
			if (insert != 0) {
				retorno = true;
			} else {
				retorno = false;
			}
			ps.close();
		} catch (SQLException e) {
			e.printStackTrace();
			throw new SQLException(e);
		} finally {
			conexao.closeConnection();
		}
		
		
		return retorno;
	}

	public boolean updateEmprestimo(Emprestimo emprestimo) throws SQLException
	{
		boolean retorno = false;
		
		try {
			String sql = "update tb_emprestimo set id = ?, id_livro = ?, id_cliente = ?, dt_emprestimo = ?, dt_devolucao = ? where id = ?;";
			ps = conexao.getConnection().prepareStatement(sql);
			ps.setInt(1, emprestimo.getId());
			ps.setInt(2, emprestimo.getLivro().getId());
			ps.setInt(3, emprestimo.getCliente().getId());
			ps.setDate(4, emprestimo.getDtEmprestimo());
			ps.setDate(5, emprestimo.getDtDevolucao());

			int update = ps.executeUpdate();
			
			if (update != 0) {
				retorno = true;
			} else {
				retorno = false;
			}
			
			ps.close();
		} catch (SQLException e) {
			e.printStackTrace();
			throw new SQLException(e);
		} finally {
			conexao.closeConnection();
		}
		
		return retorno;
	}

	public boolean deleteEmprestimo(Emprestimo emprestimo) throws SQLException
	{
		boolean retorno = false;
		
		try {
			String sql = "delete from tb_emprestimo where id = ?;";
			ps = conexao.getConnection().prepareStatement(sql);
			ps.setInt(1, emprestimo.getId());
			
			int delete = ps.executeUpdate();
			
			if (delete != 0) {
				retorno = true;
			} else {
				retorno = false;
			}
			
			ps.close();
		} catch (SQLException e) {
			e.printStackTrace();
			throw new SQLException(e);
		} finally {
			conexao.closeConnection();
		}
		
		
		return retorno;
	}

	public List<Emprestimo> listEmprestimos(Emprestimo emprestimo) throws SQLException
	{
		List<Emprestimo> listEmprestimo = null;
		
		try {
			String sql = null;

			if (emprestimo != null) {
				sql = "select e.id as id_emprestimo, l.id as id_livro, l.nm_livro, c.id as id_cliente, c.nm_cliente" +
						"from tb_emprestimo e, tb_livro l, tb_cliente c" +
						"where e.id_livro = l.id" +
						"and e.id_cliente = c.id" +
						"and";
				
				if (emprestimo.getLivro().getNmLivro() != null && emprestimo.getLivro().getNmLivro().trim().length() > 0)
				{
					sql += " l.nm_livro like + " +emprestimo.getLivro().getNmLivro()+ "%";
				}

				else if (emprestimo.getCliente().getNmCliente() != null && emprestimo.getCliente().getNmCliente().trim().length() > 0)
				{
					sql += " or c.nm_cliente like + " +emprestimo.getCliente().getNmCliente()+ "%";
				}

				else  if (emprestimo.getDtEmprestimo() != null)
				{
					sql += " or dt_emprestimo = + " +emprestimo.getDtEmprestimo();
				}
			}
			else
			{
				sql = "select e.id as id_emprestimo, l.id as id_livro, l.nm_livro, c.id as id_cliente, c.nm_cliente" +
				" from tb_emprestimo e, tb_livro l, tb_cliente c" +
				" where e.id_livro = l.id" +
				" and e.id_cliente = c.id;";
			}
			
			ps = conexao.getConnection().prepareStatement(sql);
			
			ResultSet rs = ps.executeQuery();
			
			if (!rs.equals(null))
			{
				listEmprestimo = new ArrayList<Emprestimo>();
			}
			
			Emprestimo emprestimoAux = null;
			
			while (rs.next())
			{
				emprestimoAux = new Emprestimo();
				emprestimoAux.setId(rs.getInt("id_emprestimo"));
				emprestimoAux.getLivro().setId(rs.getInt("id_livro"));
				emprestimoAux.getLivro().setNmLivro(rs.getString("nm_livro"));
				emprestimoAux.getCliente().setId(rs.getInt("id_cliente"));
				emprestimoAux.getCliente().setNmCliente(rs.getString("nm_cliente"));
				listEmprestimo.add(emprestimoAux);
			}
			
			rs.close();
			ps.close();
		} catch (SQLException e) {
			e.printStackTrace();
			throw new SQLException(e);
		} finally {
			conexao.closeConnection();
		}
		
		return listEmprestimo;
	}
}
